/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dao;

import connection.AbstractConnection;
import entidades.Entrada;
import entidades.ProdutoEntrada;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 *
 * @author Ricardo
 */
public class ProdutoEntradaDAO extends AbstractDAO {

    private final String sqlSelectProdutoEntradaByEntrada =
            "select * from produto_entrada where entrada_identrada=?";
    private final String sqlSelectProdutoEntrada =
            "select * from produto_entrada where idproduto_entrada=?";
    private final String sqlDeleteProdutoEntradaByEntrada =
            "delete from produto_entrada where entrada_identrada=?";
    private final String sqlDeleteProdutoEntrada =
            "delete from produto_entrada where idproduto_entrada=?";
    private final String sqlInsertProdutoEntrada =
            "insert into produto_entrada (entrada_identrada,produto_idproduto,quantidade,valor_compra) values (?,?,?,?)";

    public ProdutoEntradaDAO(AbstractConnection conn) {
        super(conn);
    }

    public List<ProdutoEntrada> getProdutosByIdEntrada(int id)
            throws SQLException {

        List<ProdutoEntrada> resultList = new ArrayList<ProdutoEntrada>();

        PreparedStatement ps = conn.getConnection().prepareStatement(
                sqlSelectProdutoEntradaByEntrada);

        ps.setInt(1, id);

        ResultSet rs = ps.executeQuery();

        while (rs.next()) {
            resultList.add(getProdutoEntrada(rs));
        }

        conn.closeConnection();

        return resultList;
    }

    public void inserir(List<ProdutoEntrada> lpe, int idEntrada) throws SQLException {
        for (ProdutoEntrada pe : lpe) {
            inserir(pe, idEntrada);
        }
    }

    public void inserir(ProdutoEntrada pe, int idEntrada) throws SQLException {
        PreparedStatement ps = conn.getConnection().prepareStatement(sqlInsertProdutoEntrada);

        ps.setInt(1, idEntrada);
        ps.setInt(2, pe.getProduto().getId());
        ps.setInt(3, pe.getQuantidade());
        ps.setFloat(4, new Float(pe.getValorCompra()));
        ps.executeQuery();

        conn.closeConnection();
    }

    private ProdutoEntrada getProdutoEntrada(ResultSet rs) throws SQLException {
        ProdutoEntrada pe = new ProdutoEntrada();

        pe.setId(rs.getInt("idproduto_entrada"));
        pe.setQuantidade(rs.getInt("quantidade"));
        pe.setValorCompra(rs.getFloat("valor_compra"));

        pe.setProduto(
                (new ProdutoDAO(getNewConnection())).getProdutoById(rs.getInt("produto_idproduto")));

        return pe;
    }
}
